From 8217ae245c82de3ce03d603124b413bc4d089b36 Mon Sep 17 00:00:00 2001 From: Camm Maguire Date: Wed, 24 Jun 2026 17:33:56 +0000 Subject: [PATCH] [PATCH] TODO: Put a short summary on the line above and replace this paragraph with a longer explanation of this change. Complete the meta-information with other relevant fields (see below for details). To make it easier, the information below has been extracted from the changelog. Adjust it or drop it. Gbp-Pq: Name Version_2_7_2pre32 --- git.tag | 2 +- h/pool.h | 2 +- lsp/gcl_top.lsp | 8 ++++---- o/alloc.c | 20 +++++++++++++++----- o/cfun.c | 2 ++ o/disable_aslr.c | 2 +- o/gbc.c | 7 +++++-- o/read.d | 3 +++ o/save.c | 2 ++ 9 files changed, 34 insertions(+), 14 deletions(-) diff --git a/git.tag b/git.tag index 18f43b77..b3ec9ff6 100644 --- a/git.tag +++ b/git.tag @@ -1 +1 @@ -"Version_2_7_2pre31" +"Version_2_7_2pre32" diff --git a/h/pool.h b/h/pool.h index 4c219081..054cd1fe 100644 --- a/h/pool.h +++ b/h/pool.h @@ -120,9 +120,9 @@ close_pool(void) { if (!fcntl(pool,F_SETLK,&f)) massert(!unlink(gcl_pool) || errno==ENOENT); register_pool(-1); - massert(!munmap(Pool,sizeof(struct pool))); massert(!close(pool)); pool=-1; + massert(!munmap(Pool,sizeof(struct pool))); memset(gcl_pool,0,sizeof(gcl_pool)); no_recur=0; } diff --git a/lsp/gcl_top.lsp b/lsp/gcl_top.lsp index 860b69b5..5ce9f43a 100644 --- a/lsp/gcl_top.lsp +++ b/lsp/gcl_top.lsp @@ -113,14 +113,14 @@ (coerce-to-package (eval (read)))))) ;(declaim (inline coerce-to-package)) -(defun reset-lib-syms nil +(defun reset-lib-syms (on) (when (find-package "LIB") (do-external-symbols (p "LIB") - (setf (symbol-value p) (dlopen (lib-name p))) + (setf (symbol-value p) (when on (dlopen (lib-name p)))) (do-external-symbols (s p) - (setf (symbol-value s) (dlsym (symbol-value p) s))))) + (setf (symbol-value s) (when on (dlsym (symbol-value p) s)))))) (cfdl)) (defun top-level1 () @@ -698,7 +698,7 @@ First directory is checked for first name and all extensions etc." (defun set-up-top-level (&aux (i (argc)) tem) (declare (fixnum i)) - (reset-lib-syms) + (reset-lib-syms t) (setq *tmp-dir* (get-temp-dir) *current-directory* (current-directory-namestring)) (when *cc* ;raw-image init complete (setq *current-directory* (pathname *current-directory*) diff --git a/o/alloc.c b/o/alloc.c index ca38f530..75fe40ab 100644 --- a/o/alloc.c +++ b/o/alloc.c @@ -1696,18 +1696,28 @@ static char *baby_malloc(n) /* #endif */ bool writable_malloc=0; +static void *malloc_pre_main_base,*malloc_pre_main_ptr,*malloc_pre_main_end; static void * malloc_internal(size_t size) { if (!msbrk_initialized()) { static bool recursive_malloc; - if (recursive_malloc) - error("Bad malloc"); + unsigned long s=PAGESIZE; + + massert(!recursive_malloc); recursive_malloc=1; - gcl_init_alloc(&size); + if (!malloc_pre_main_base) { + massert((malloc_pre_main_base=mmap(NULL,s,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON,-1,0))!=(void *)-1); + malloc_pre_main_ptr=malloc_pre_main_base; + malloc_pre_main_end=malloc_pre_main_base+s; + } + massert(size<=(malloc_pre_main_end-malloc_pre_main_ptr)); + malloc_pre_main_ptr+=size; recursive_malloc=0; - } + return malloc_pre_main_ptr-size; + } else + malloc_pre_main_base=malloc_pre_main_ptr=malloc_pre_main_end=NULL; CHECK_INTERRUPT; @@ -1732,7 +1742,7 @@ free(void *ptr) { object *p,pp; - if (ptr == 0) + if (ptr == 0 || ptr < data_start || ptr >= core_end) return; for (p = &malloc_list,pp=*p; pp && !endp(pp); p = &((pp)->c.c_cdr),pp=pp->c.c_cdr) diff --git a/o/cfun.c b/o/cfun.c index c2aaf07b..1c7d0d15 100644 --- a/o/cfun.c +++ b/o/cfun.c @@ -49,6 +49,8 @@ make_cfun(void (*self)(), object name, object data, char *start, int size) { } +DEF_ORDINARY("RESET-LIB-SYMS",sSreset_lib_syms,SI,""); + DEFUN("CFDL",object,fScfdl,SI,0,0,NONE,OO,OO,OO,OO,(void),"") { struct typemanager *tm=tm_of(t_cfdata); diff --git a/o/disable_aslr.c b/o/disable_aslr.c index 77e18ca9..61046967 100644 --- a/o/disable_aslr.c +++ b/o/disable_aslr.c @@ -91,7 +91,7 @@ void disable_aslr(int argc, char **argv, char **envp) { long pers; - long flag = ADDR_NO_RANDOMIZE|(sizeof(flag)==4 ? ADDR_LIMIT_3GB : 0); + long flag = ADDR_NO_RANDOMIZE|(sizeof(flag)==4 ? ADDR_COMPAT_LAYOUT : 0); massert((pers=personality(-1))!=-1); diff --git a/o/gbc.c b/o/gbc.c index 95ad23d6..8d29668b 100644 --- a/o/gbc.c +++ b/o/gbc.c @@ -1079,8 +1079,11 @@ GBC(enum type t) { if (tm->tm_type==v->type) for (x=pagetochar(page(v)),j=tm->tm_nppage;j--;x+=tm->tm_size) { object o=x; - if (type_of(o)==t_stream && !is_free(o) && o->sm.sm_fp && o->sm.sm_fp!=stdin && o->sm.sm_fp!=stdout && o->sm.sm_fp!=stderr) - close_stream(o); + if (type_of(o)==t_stream && !is_free(o) && o->sm.sm_fp) { + if (o->sm.sm_fp!=stdin && o->sm.sm_fp!=stdout && o->sm.sm_fp!=stderr) + close_stream(o); + o->sm.sm_fp=NULL; + } } gc_time = -1; diff --git a/o/read.d b/o/read.d index 93fc52bc..10ca9a3b 100644 --- a/o/read.d +++ b/o/read.d @@ -1637,6 +1637,9 @@ Lsharp_dollar_reader() tx=type_of(x); vs_base[0] = alloc_object(t_random); init_gmp_rnd_state(&vs_base[0]->rnd.rnd_state); +#if __GNU_MP_VERSION > 4 || (__GNU_MP_VERSION == 4 && __GNU_MP_VERSION_MINOR >= 2) + vs_base[0]->rnd.rnd_state._mp_algdata._mp_lc=&Mersenne_Twister_Generator_Noseed; +#endif if (tx!=t_fixnum || fix(x)) { if (tx==t_fixnum) { if (vs_base[0]->rnd.rnd_state._mp_seed->_mp_size!=1) diff --git a/o/save.c b/o/save.c index c9de258c..0b68afcf 100644 --- a/o/save.c +++ b/o/save.c @@ -20,12 +20,14 @@ LFD(siLsave)(void) { extern char *kcl_self; extern void *shared_lib_start; extern jmp_buf gmp_jmp; + extern object sSreset_lib_syms; check_arg(1); memset(FN1,0,sizeof(FN1)); coerce_to_filename(vs_base[0], FN1); + ifuncall1(sSreset_lib_syms,Cnil); close_dlopen_list(); frs_top=frs_org-1; gcl_cleanup(1); -- 2.30.2